package com.master_jpeg.img;


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;



public class JImageContainer extends JPanel {

    /**
     * переменные в которых хранятся координаты части картинки которую над показывать.
     * при чем wImg, hImg - это не длина части картинки которую над показать,
     * а координата второго угла прямоугольника.
     */
    private int xImg, yImg, wImg, hImg;
    private double zoom = 1;
    private Rectangle2D rect = new Rectangle2D.Double();
    private static Image img = null;
    private Point2D press = new Point2D.Double(0, 0);
    private boolean pressedBtn = false;

    public JImageContainer() {

        this.addComponentListener(new ComponentAdapter() {
            //перерисовывает картинку в случае изменения размеров фрейма...
            @Override
            public void componentResized(ComponentEvent ce) {
                repaint();
            }
        });

        this.addMouseWheelListener(new MouseWheelListener() {
            //добавляем обработчик событий который слушает колёсико мышки, ну и изменяет размер картинки
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                if (e.getWheelRotation() == 1) {
                    zoom += 0.1;
                } else {
                    zoom -= 0.1;
                }
                repaint();
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g;
        if (img != null) {
            g2.drawImage(img, 0, 0, (int)(wImg*zoom), (int)(hImg*zoom),
                    xImg,
                    yImg,
                    xImg + wImg,
                    yImg + hImg,
                    null);
            if (pressedBtn) {
                g2.draw(rect);
            }
        }
    }

    public void setSelectedImage(BufferedImage selectedPart) {
            img = selectedPart;
            zoom = 1;
            xImg = 0;
            yImg = 0;
            wImg = img.getWidth(JImageContainer.this);
            hImg = img.getHeight(JImageContainer.this);
            repaint();

    }
}
